//Contadores escaparate

/**
 *  privalia.menuheader.js - Common
 * =========================================
 * @requieres: 	00-protoaculous.1.8.3.min.js
 * @revision: 	1.0
 */

/**
 * PrivaliaJsonMenuheader - Common
 * =========================================
 * @modified: 	Ruben	(03-06-2011)
 */
var PrivaliaJsonMenuheader = Class.create(CestaVipMain, {
  initialize: function($super) {
    $super();
    this.vAvailabilityStatus =	[];
    this.b_cartLoaded =		false;
    this.cartEmptyHeight =	'120'; 				// px
    this.cartFullHeight =	'150'; 				// px
    this.cssJson =			'jsonMH';
    this.idCart =			'divCart';
    this.idCartData =		'cart-data';
    this.idCartBtn =		'cart_buttons';
    this.idMiniCart =		'mini-cart';
    this.idMiniCartFull =	'miniCartBody';
    this.idMiniCartEmpty =	'miniCartBodyEmpty';
    this.idPromoNext =		'promo-cart-2';
    this.idPromoToday =		'promo-cart-1';
    this.idSubtotal =		'mini-cart_subtotal-label';
    this.idVouchers =		'divVouchers';
    this.errId =			'26';
    this.modalReopen =		null;
    this.numItems =			-1;
    this.reopenErrorText =	'';

    // temporizador
    this.timerDiv = 			'cart-time';		// Id del contenedor donde va el temporizador y los copys
    this.idCountdown = 			'countDown';		// Id del contenedor donde va a ir la cuenta atras
    this.idCountdownCart =		'countDownCart';		// Id del contenedor donde va la cuenta atras en la cesta
    this.timer=1500;    
    this.cartInterval =			0;
    this.txt_novouchers =	'no vouchers';

  },

  /**
   * Construye la pagina con los datos pasados por json previamente
   */
  buildPage: function(generate) {
    // en este punto ya ha cargado los datos de la cesta
        this.htmlGenerate({
          pushData: this.pushCartBox
        });

	//Mostrar Reloj en cesta
          if($(this.idCountdown) !== null){
            this.countdown(this.timer, this.idCountdown);
          }
          // temporizador que sale en la cesta
          if($(this.idCountdownCart) !== null){
            this.countdown(this.timer, this.idCountdownCart);
          }
          // en el caso de que exista una cuenta atras se muestra el icono del reloj
          $$('.ico-countdown').each(function(item){
            $(item).removeClassName('hidden')
          });
        

        //Preparamos la cesta segun si hay o no productos asegurandonos que existe la cesta
        if($(this.idCart) != null){
        	this.checkCartStatus();
        }

        this.stopLoadText();

  },
	setAvailabilityTxt: function(idAvailability, txt) {
		this.vAvailabilityStatus[idAvailability] = txt;
	},


  /**
   * Comprueba si tiene la cesta vacia o no, y configura el modo de visualizacion y la botonera
   */
  checkCartStatus: function () {
    // tiene productos en el carrito, mostramos botones y usamos icono correcto
    if(this.getNumItems() > 0) {
      $(this.idMiniCartEmpty).hide();
      $(this.idMiniCartFull).show();
      if($(this.idMiniCart).hasClassName('empty')){
    	  $(this.idMiniCart).removeClassName('empty');
      }
    }else{
		this.cartCounterReset();
      $(this.idMiniCart).addClassName('empty');
      $(this.idMiniCartFull).hide();
      $(this.idMiniCartEmpty).show();
		if($(this.idNotification) !== null) {
        	this.closeNotify();
        }
    }
    $(this.idMiniCart).stopWaiting();
  },

   /**
   * Countdown Timer, cuenta atras para vaciar la cesta de productos
   */
  countdown: function (remain, id, modal){
    if(id != '' && $(id) !== null){
      // pasamos la id en la que se mostrara el reloj
      var countdown = $(id),
      b_timer = true;

      if(countdown.innerHTML == ''){
        // configuramos el intervalo de la cuenta atras
        var timer = setInterval( (function () {
          // insertamos el reloj en el formato configurado
          countdown.innerHTML = Math.floor(remain/60) + ":" + (remain%60 < 10 ? "0": "") + remain %60;
          // si el tiempo restante es menor a 0 es que ha terminado
          if (remain-- <= 0 && b_timer == true ){
            // reset - detiene el contador a 00:00
            // TODO: Revisar esta funcion
            clearInterval(timer);
            // se vacia la cesta
            MH.submitEmptyCart('emptyCart');
            // abre la modal que comunica la caducidad de la cesta y hace un refresh de la pagina
            this.expiredCartModal();

            // Ocultar el div del temporizador
            if($(this.timerDiv) !== null){
            	$(this.timerDiv).addClassName("hidden");
            }
            // Para evitar llamadas a emptyCart y que solo la haga una vez
            b_timer = false;
          }
	  this.cartInterval = timer;
        // no cambiar, este integer es el intervalo normal de tiempo
        }).bind(this),1000);
      }
      }
  },

  /**
   * Abre el modal cuando el tiempo de la cesta a caducado
   */
  expiredCartModal: function(){
    // declaramos que modal se va a abrir
    var modal = new Control.Modal('modalExpiredCart', CFG_NO_AVOIDABLE_MODAL);
    // se abre la modal
    modal.open();
  },


  /**
   * Los datos de la cesta se han cargado
   */
  getCartLoaded: function() {
    return this.b_cartLoaded;
  },

 /**
   * Devuelve el subtotal de la cesta
   */
  getSubtotal: function () {
    var res = '';
    if(!Object.isUndefined(this.getAjaxData().header_order_data)) {
      res = this.getAjaxData().header_order_data.order_amount;
    }
    return res;
  }, 
 /**
   * Devuelve el numero de items que tiene la cesta
   */
  getNumItems: function () {
    if(!Object.isUndefined(this.getAjaxData().header_order_data)) {
      this.numItems = this.getAjaxData().header_order_data.order_num_items;
    }
    else {
      this.numItems = 0;
    }
    return this.numItems;
  },
	/**
	* Vuelca el Mini-carrito
	* @param {Object} dataJson
	* @param {Object} index
	*/ 
  pushCartBox: function(dataJson, index) {
		var noVouchers = false,
		promotions = 0,
		vouchers = 0,
		target = this.getTarget();

    // comprobar si tiene cheques regalo
    if(target == 'header_voucher_data') {
      vouchers = dataJson.total;
      // TODO: hay que comparar de otra forma ya que incluyen la moneda
      if(!vouchers) {
        dataJson.total = '';
        this.noVouchers = true;
      }
    }

	if(target == 'header_order_data') {
		if($(this.idSubtotal) !== null){
			var s_subTotal = this.getSubtotal();
			$(this.idSubtotal).update(s_subTotal);
		}
		// comprobar si tiene promociones
		promotions = dataJson.header_order_activates_promotion;
			if (promotions === 1 && ($(this.idPromoNext) != null)) {
			$(this.idPromoNext).removeClassName("hidden");
			} else if (promotions > 1 && ($(this.idPromoToday) != null)) {
			$(this.idPromoToday).removeClassName("hidden");
		}
	}
		// Si el campo del nombre viene vacio, no introducimos ningun espacio
		if(target == 'header_page_data') {
			if(dataJson.member_name !== ''){
				dataJson.member_name = ' ' + dataJson.member_name; 
			}
		}

    //sumo datos a volcar
    this.addBuilt(dataJson);
  },
  

});


 /*   
  PrivaliaMenuheader - Common
 * =========================================
 * @modified: 	Cristina	(13-05-11)
 */
var PrivaliaMenuheader = Class.create(PrivaliaJsonMenuheader, {
  initialize: function($super) {
    $super();

    this.b_topScroll =					true;					// cuando se muestra la cesta, ha de subir (scroll)
    this.b_open =						false;					// indica si la cesta esta abierta
    this.errId =						'04';
    this.max = 							0.7;
    this.target = 						'#divMenu #menu li';

    this.txt_hide =						'hide';
    this.txt_show =						'show';

    this.autoClose = 					null;					// guardamos el setTimeout del autocierre
    this.i_segAutoClose =				10;						// segundos hasta que la cesta se auto-cierra
    this.i_segCloseViewCart =			2;						// segundos hasta que la cesta se cierra tras mostrarla voluntariamente

    this.idCartBasket =					'cart_basket';
    this.idInviteInput = 				'email_header';
    this.idInviteForm =					'registerinvite';
    this.idMiniCartBox =				'miniCartBody';
    this.idMiniCartLateralShadow =		'#mini-cart .lateralshadow'
    this.hasMiniCartShadows=			false;
    this.b_inviteDefault = 				true;
     //version
       this.version =				3.0;				//modificar version al crear un nuevo metodo - WEB-183 - 3.0
       													//cambiar id - bug apadrinamiento - 2.1
       
       

       this.setShowLoad(false);
  },


  //Mostrar cesta al pasar por zona activa
    initViewCart: function(){
 	   //comprovamos si esta abierta, si no la mostramos
 	   if(!this.b_open){
 		 this.viewcart();
 	   	} else {
 		   if(this.autoClose != null){
 		   // anulamos el setTimeout, por si estuviera contando
 			window.clearTimeout(this.autoClose);
 		   } else {
 			 // cerramos la cesta
 			 this.viewcart();
 		   }
 	   }
    },

    /**
     * Iniciamos temporizador y cerramos
     */
    timeOutViewCart: function() {
		if(this.b_open){
			this.autoClose = this.setActionTimeOut(this.viewcart.bind(this), this.i_segCloseViewCart);
		}
    },
  

  /**
   * asignar texto para la etiqueta ocultar
   */
  setTxtHide: function (txt) {
    this.txt_hide = txt;
  },

  /**
   * asignar texto para la etiqueta mostrar
   */
  setTxtShow: function (txt) {
    this.txt_show = txt;
  },

 
  /**
   * Mostrar u ocultar el contenido de la cesta
   */
  viewcart: function() {
    var seg_open = 0.8;
    var seg_close = 0.6;

    // anulamos el setTimeout, por si estuviera contando
   // window.clearTimeout(this.autoClose);

    if(!this.b_open) {
      // No esta abierta, la abrimos
      if($(this.idCartBasket)!== null){
        $(this.idCartBasket).slideDown({
          duration: seg_open,
          afterFinish: this._endViewcart.bind(this)
        });
      }
      this.b_open = true;
    }
    else if(!this.b_AddToCart){
      // cerramos la cesta solo si no estamos anyadiendo producto
      $(this.idCartBasket).slideUp({
        duration: seg_close
      });

      this.b_open = false;

      if(this.autoClose != null){
        // anulamos el setTimeout, por si estuviera contando
		window.clearTimeout(this.autoClose);
	   }
    } else{
    	//Si la cesta esta abierta y anyadimos al carrito
    	 this.scrollToCart();
    }
    this.b_AddToCart = false;
  },

  /**
   * funcion callback que hace despues de la transicion de mostrar la cesta de la compra
   */
  _endViewcart: function () {
    // Ajustamos el tamanyo de las sombras a la altura del carrito

  }
});
